#ifndef INDUSTRIAL_ROBOT_CONTROL_MODBUS_CLIENT_H
#define INDUSTRIAL_ROBOT_CONTROL_MODBUS_CLIENT_H

#include <string>
#include <cstdint>

struct modbus;

namespace IndustrialRobotControl {
namespace Modbus {

class ModbusClient {
public:
    ModbusClient();
    ~ModbusClient();
    
    // 禁止拷贝
    ModbusClient(const ModbusClient&) = delete;
    ModbusClient& operator=(const ModbusClient&) = delete;
    
    // 连接到Modbus服务器
    bool connect(const std::string& ip_address, int port);
    
    // 断开连接
    void disconnect();
    
    // 读取线圈状态
    bool read_coils(int addr, int num, uint8_t* dest);
    
    // 读取离散输入
    bool read_discrete_inputs(int addr, int num, uint8_t* dest);
    
    // 读取保持寄存器
    bool read_holding_registers(int addr, int num, uint16_t* dest);
    
    // 读取输入寄存器
    bool read_input_registers(int addr, int num, uint16_t* dest);
    
    // 写入单个线圈
    bool write_single_coil(int addr, int status);
    
    // 写入单个寄存器
    bool write_single_register(int addr, uint16_t value);
    
    // 检查是否连接
    bool is_connected() const { return connected_; }
    
private:
    modbus* ctx_;
    bool connected_;
};

} // namespace Modbus
} // namespace IndustrialRobotControl

#endif // INDUSTRIAL_ROBOT_CONTROL_MODBUS_CLIENT_H
